<?php
namespace app\index\controller;

use think\Request;
use think\Controller;
use app\index\model\Staff;
use think\Db;
use think\View;


class Index extends Controller
{
    public function index()
    {
        return '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="ad_bd568ce7058a1091"></think>';
    }

    public function demo7()
    {
        $this->view->domain = 'www.php.com';
        $this->view->birthday = strtotime('1999-09-09');
        return $this->fetch();
    }

    public function demo6()
    {
        // assign 传参赋值
        // 单独赋值
        // $this->assign('project', 'TEST');
        // // 批量赋值
        // $this->assign([
        //     'name' => 'PHP',
        //     'say' => 'Hello '
        // ]);
        // 渲染模板
        // return $this->fetch();

        // fetch 传参赋值
        // return $this->fetch('demo6', [
        //     'project' => 'TEST',
        //     'name' => 'World',
        //     'say' => 'Hello '
        // ]);

        // display 传参赋值
        // $content = '<p>我的项目：<span style="color: blue;">{$project}</span></p>
        // <p><span style="color: blue;">{$say}{$name}!</span></p>';
        // return $this->display($content, [
        //     'project' => 'TEST',
        //     'name' => 'ThinkPHP',
        //     'say' => 'Hello '
        // ]);

        // 动态添加属性方式给模板赋值
        // 通过基类 Controller 继承
        // $this->view->project = 'TEST';
        // $this->view->name = 'Controller';
        // $this->view->say = 'Hello ';
        // return $this->fetch();

        // 实例化 View 类创建视图对象
        // View::instance()->project = 'TEST';
        // View::instance()->name = 'View';
        // View::instance()->say = 'Hello ';
        // // 用 share 给模板添加静态变量
        // View::share('project', 'TESTS');
        // return View::instance()->fetch();

        // 用 view 助手函数向模板赋值
        // return view('demo6', [
        //     'project' => 'TEST',
        //     'name' => 'view 助手函数',
        //     'say' => 'Hello '
        // ]);

        // fetch 替换变量
        // return $this->fetch(
        //     '',
        //     ['project' => 'TEST', 'name' => 'PHP', 'say' => 'Hello '],
        //     ['项目' => 'project']
        // );
        // view 替换变量
        // return view(
        //     '',
        //     ['project' => 'TEST', 'name' => 'PHP', 'say' => 'Hello '],
        //     ['项目' => 'project']
        // );

        // dump($_SERVER);
        setcookie('siteName', 'PHP test view');
        return $this->fetch('', [
            'project' => 'TEST',
            'name' => 'PHP',
            'say' => 'Hello '
        ]);
    }

    public function demo5()
    {
        // // 创建模版实例
        // $view = new View();
        // //静态创建
        // $view = View::instance();
        // // 模版赋值
        // $view -> assign('domain', 'Hello World!');
        // // 渲染模版
        // return $view -> fetch();

        // 用基类控制器直接调用 View 的方法
        // $this->view->assign('domain', 'Hello PHP!');

        // return $this->view->fetch();
        // $this->view->assign('domain', 'Hello PHP!');
        // return $this->view->fetch();

        // $this->assign('domain', 'Hello PHP!');
        // return $this->fetch();

        // 使用助手函数
        // return view('demo5', [
        //     'domain' => 'Hello World!',
        //     'name' => 'Fichin'
        // ]);

        // 使用 display 传输变量
        // $content = '<p><span style="color: blue;">{$name}-{$domain}</span></p>';
        // return $this->display($content, [
        //     'name' => 'Everyone',
        //     'domain' => 'Hello PHP!'
        // ]);
    }
    public function demo4()
    {

        // 修改器测试
        // $staff = new Staff;
        // $staff->name = '段誉';
        // $staff->sex = 1;
        // $staff->salary = 8000;
        // $staff->hiredate = '2018-09-26';
        // if($staff->save()) {
        //     return '新成员：' . $staff->name . 'ID:' . $staff->id . '添加成功';
        // } else {
        //     return $staff->getError();
        // }

        // $staff = Staff::get(17);
        // return $staff->salary;

        // $result = Staff::create([
        //     'name' => '黄药师',
        //     'sex' => 1,
        //     'salary' => 10000,
        //     'dept' => '桃花岛'
        // ]);
        // if($result) {
        //     return $result->name . '添加成功';
        // } else {
        //     return $result->getError();
        // }

        // // 软删除
        // $result = Staff::destroy(18);
        // // 真删除
        // $result = Staff::destroy(18, true);
        // dump($result);

        // $staff = Staff::find(1);
        // dump($staff->visible(['id','name','salary'])->toArray());

        $staff = Staff::all();
        dump(collection($staff)->visible(['id', 'name', 'salary'])->toArray());
    }

    public function demo3()
    {
        // 实例化模型，创建模型对象
        // $staff = new Staff();
        // $result = $staff->where('id', 3)->find();
        // dump($result);

        // 静态调用
        $result = Staff::get(3)->myTest();
        // $result = $staff::get(3)->myTest();
        dump($result);

        // $staff -> name = '郭芙';
        // $staff -> sex = 0;
        // $staff -> salary = 8000;
        // $staff -> dept = '桃花岛';

        // $result = $staff -> save();
        // return $result ? '成功添加了' . $result . '条记录' : '添加失败';

        // $list = [
        //     ['name' => '阿紫', 'sex' => 0, 'salary' => 7000, 'dept' => '大漠'],
        //     ['name' => '虚竹', 'sex' => 1, 'salary' => 6000, 'dept' => '逍遥派'],
        //     ['name' => '段誉', 'sex' => 1, 'salary' => 9000, 'dept' => '大理国']
        // ];
        // $result = $staff -> saveAll($list);
        // dump($result);

        // $result = Staff::create([
        //     'name' => '段延庆',
        //     'sex' => 1,
        //     'salary' => 10000,
        //     'dept' => '大理国'
        // ]);
        // dump($result);

        // $data = [
        //     'name' => '慕容复',
        //     'sex' => 1,
        //     'salary' => 9000,
        //     'dept' => '姑苏慕容'
        // ];
        // $where = ['id' => 17];
        // $result = $staff->save($data, $where);
        // // $result = $staff->isUpdate(true)->save($data);
        // // $result = $staff->save($data);
        // dump($staff->getData());

        // // update(更新数据，更新条件，允许更新字段)，可以使用闭包
        // $data = [
        //     'name' => '慕容复',
        //     'sex' => 0,
        //     'salary' => 8000,
        //     'dept' => '燕国'
        // ];
        // // $where = ['id' => 17];
        // // 闭包函数
        // $where = function ($query) {
        //     $query->where('id', 17);
        // };
        // $field = ['salary', 'dept'];
        // $result = Staff::update($data, $where, $field);
        // dump($result->getdata());

        // 模型实例化调用 find 和 get
        // 闭包函数
        // $where = function ($query) {
        //     $query->where('id', 17)->field(['name' => '姓名', 'salary' => '工资']);
        // };
        // // $result = $staff->find($where);
        // $result = $staff->get($where);
        // dump($result->getData());

        // 模型实例化调用 select 和 all 方法
        // $where = function ($query) {
        //     $query->where('salary', '>', 6000)->field(['name' => '姓名', 'salary' => '工资']);
        // };
        // // $result = $staff->select($where);
        // $result = $staff->all($where);
        // foreach($result as $value) {
        //     dump($value->getData());
        // }

        // 模型静态调用 find 方法
        // $where = function ($query) {
        //     $query->where('id', 2)->field(['name' => '姓名', 'salary' => '工资']);
        // };
        // $result = $staff->select($where);
        // $result = Staff::get($where);
        // dump($result->getData());

        // delete 方法
        // $result = Staff::get(['id' => ['>', 15]]);
        // $affected = $result->delete();
        // dump($affected);

        // destroy 方法
        // $where = function ($query) {
        //     $query->where('id', '>', 10)
        //     ->where('salary', '>', 8000)
        //     ->whereOr('salary', '=', 10000);
        // };
        // $result = Staff::all($where);
        // // $result = Staff::destroy($where);
        // dump($result);
    }

    public function demo2()
    {
        // 查询语句，value('字段','默认值')
        // $result = Db::table('staff')->where('id', 10)->value('name', 'salary');
        
        // 查询语句，column('字段', '字段')
        $result = Db::table('staff')->where('id', '>', 3)->column('salary', 'name');
        dump($result);

        // $affected = Db::table('staff')->delete(6);
        // 删除多条
        // $affected = Db::table('staff')->delete([6, 7]);
        // 清空表
        // $affected = Db::table('staff')->delete(true);
        // return $affected ? '成功删除' . $affected . '条记录' : '删除失败';

    }

    public function test()
    {
        // 链式操作,读取操作
        // $result = Db::table('staff')
        // ->field(['name', 'sex', 'salary'])
        // ->where('name', '小龙女')
        // ->find();

        // $result = Db::table('staff')
        // ->field(['name', 'sex', 'salary'])
        // ->where('salary', '>', 4000)
        // ->select();

        // $result = Db::table('staff')
        // ->field(['name', 'sex', 'salary'])
        // ->where(['salary' => ['>', 4000], 'id' => ['>', 2]])
        // ->select();

        $salary = 3000;
        // $result = Db::table('staff')
        //     ->field(['name', 'sex', 'salary'])
        //     ->where(function ($query) use ($salary) {
        //         $query->where('id', '>', 2)
        //             ->where('salary', '>', $salary);
        //     })
        //     ->select();

        $result = Db::select(
            function ($query) use ($salary) {
                $query->table('staff')
                    ->field(['name' => '姓名', 'sex' => '姓名', 'salary' => '工资'])
                    ->where([
                        'id' => ['>', 2],
                        'salary' => ['>', $salary]
                    ]);
            }
        );
        dump($result);


        // 链式操作，插入操作
        // $affected = Db::table('staff')
        // ->insert([
        //     'name' => '老顽童',
        //     'sex' => 1,
        //     'salary' => 2000,
        //     'dept' => '桃花岛',
        // ]);

        // $affected = Db::table('staff')
        //     ->insertAll([
        //         [
        //             'name' => '老顽童',
        //             'sex' => 1,
        //             'salary' => 2000,
        //             'dept' => '桃花岛',
        //         ],
        //         [
        //             'name' => '张无忌',
        //             'sex' => 1,
        //             'salary' => 8000,
        //             'dept' => '明教'
        //         ]
        //     ]);
        // return $affected ? '成功添加' . $affected . '条记录' : '添加失败';

        // 链式操作，更新操作
        // $affected = Db::table('staff')
        // ->update([
        //     'id' => 8,
        //     'salary' => 3000
        // ]);

        // $affected = Db::table('staff')
        // ->where('id', 8)
        // ->update([
        //     'salary' => 2000
        // ]);

        // $affected = Db::table('staff')
        //     ->where('id', 8)
        //     // ->setInc('salary', 2000);
        //     // ->setDec('salary', 2000);
        //     ->setDec('salary', 2000, 5);
        // return $affected ? '成功更新' . $affected . '条记录' : '更新失败';

    }

    public function hello()
    {
        // echo '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)<br/>成功</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="ad_bd568ce7058a1091"></think>';
        return $this->success('新增成功', '/fff');
    }

    public function fff()
    {
        return 'ppp';
    }

    public function demo()
    {
        // $config = [
        //     'type' => 'mysql',
        //     'hostname' => 'localhost',
        //     'username' => 'username',
        //     'password' => 'password',
        //     'database' => 'thinkphp'
        // ];

        // $config = 'mysql://username:password@localhost:3306/thinkphp#utf8';
        // 获取数据库连接实例/对象
        // $link = Db::connect($config);
        // $link = Db::connect();
        // // 利用连接实例调用查询类的查询方法
        // $result = $link->table('staff')->select();
        // // 输出查询结果
        // dump($result);

        // 查询操作，用命名占位符进行参数绑定
        $sql = 'select name, sex, salary from staff where salary > :salary';
        $result = Db::query($sql, ['salary' => 4000]);
        dump($result);

        // // 更新操作
        // $sql = 'update staff set salary = salary + 1000 where id = :id';
        // $result = Db::execute($sql, ['id' => 5]);
        // dump($result);

        //  插入操作，默认插入到表的尾部
        // $sql = 'insert into staff (name, sex, salary) values (:name, :sex, :salary)';
        // $result = Db::execute($sql, ['name' => '欧阳锋', 'sex' => 1, 'salary' => 10000]);
        // dump($result);

        // 删除操作
        // $sql = 'delete from staff where id = :id';
        // $result = Db::execute($sql, ['id' => 7]);
        // dump($result);
    }
}
